package com.zc.mychart.model;

import com.github.mikephil.charting.data.CandleEntry;
import com.github.mikephil.charting.data.Entry;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2018/2/27 0027.
 */

public class MAEntrys {
    private List<Entry> MA5s;
    private List<Entry> MA10s;
    private List<Entry> MA20s;

    public MAEntrys(List<CandleEntry> list) {
        MA5s = getMAEntries(list, 5);
        MA10s = getMAEntries(list, 10);
        MA20s = getMAEntries(list, 20);
    }

    public List<Entry> getMA5s() {
        return MA5s;
    }

    public List<Entry> getMA10s() {
        return MA10s;
    }

    public List<Entry> getMA20s() {
        return MA20s;
    }

    /**
     * 【MA】：求简单移动平均
     * 用法：MA(X,N),求X的N日移动平均值。
     * 算法：(X1+X2+X3+...+Xn)/N
     * 例如：MA(CLOSE,10) 表示求10日均价。特例：MA(X,0)表示X所有数据的平均。
     * 第一天收盘价：C1=35.12;
     * 第二天收盘价：C2=31.61;
     * 第三天收盘价：C3=34.10;
     * 第四天收盘价：C4=31.12;
     * 第五天收盘价：C5=32.16;
     * MA(C,5)
     * 第一天数值：M1=无数据
     * 第二天数值：M2=无数据
     * 第三天数值：M3=无数据
     * 第四天数值：M4=无数据
     * 第五天数值：M5=(C1+C2+C3+C4+C5)/N=(35.12+31.61+34.10+31.12+32.16)÷5=32.822
     *
     * @param list 数据源
     * @param n    MA(X,N)中的N，代表N日均线
     * @return
     */
    private List<Entry> getMAEntries(List<CandleEntry> list, int n) {
        List<Entry> entries = new ArrayList<>();
        if (list != null) {
            for (int i = n - 1; i < list.size(); i++) {
                float sum = 0;
                for (int j = 0; j < n; j++) {
                    sum += list.get(i - j).getClose();
                }
                Entry entry = new Entry(list.get(i).getX(), sum / n);
                entries.add(entry);
            }
        }
        return entries;
    }
}
